home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 43 / Mac Magazin and MacEasy Magazine CD - Issue 43.iso / Software / Multimedia / Sound / PlayerPRO 4.6 Dev.Kit / MADH Library 4.6 / MADLibrary Source / PlugImportPC.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-12  |  5.6 KB  |  276 lines  |  [TEXT/CWIE]

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 4.6 - DRIVER SOURCE CODE -
  4. //
  5. //    Library Version 4.6
  6. //
  7. //    To use with MAD Library for Mac: Symantec, CodeWarrior and MPW
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //
  14. //    COPYRIGHT ANTOINE ROSSET 1996, 1997, 1998
  15. //
  16. //    Thank you for your interest in PlayerPRO !
  17. //
  18. //    FAX:            (+41 22) 346 11 97
  19. //    PHONE:             (+41 79) 203 74 62
  20. //    Internet:         rosset@dial.eunet.ch or RossetAntoine@bluewin.ch
  21. //
  22. /********************                        ***********************/
  23.  
  24. #include "RDriver.h"
  25. #include "RDriverInt.h"
  26. #include "FileUtils.h"
  27.  
  28. #define RSRCNAME "\pRsrc Plug Sys##"
  29.  
  30. static MADLibrary*    inMADDriver;
  31.  
  32. OSErr CheckMADFile( Ptr name)
  33. {
  34.     UNFILE            refNum;
  35.     char                charl[ 20];
  36.     OSErr                err;
  37.     
  38.     refNum = iFileOpen( name);
  39.     if( !refNum) return -1;
  40.     else
  41.     {
  42.         iRead( 10, charl, refNum);
  43.         
  44.         if( charl[ 0] == 'M' &&
  45.                 charl[ 1] == 'A' &&
  46.                 charl[ 2] == 'D' &&
  47.                 charl[ 3] == 'H') err = noErr;
  48.         else err = -1;
  49.         
  50.         iClose( refNum);
  51.     }
  52.     
  53.     return err;
  54. }
  55.  
  56. OSErr TESTmain( OSType order, Ptr AlienFileName, MADMusic *MadFile, PPInfoRec *info, MADDriverSettings *init);
  57.  
  58. OSErr CallImportPlug(     short                    PlugNo,                // CODE du plug
  59.                                                 OSType                order,
  60.                                                 Ptr                    AlienFile,
  61.                                                 MADMusic            *theNewMAD,
  62.                                                 PPInfoRec            *info)
  63. {
  64. OSErr                myErr;
  65. MADDriverSettings     driverSettings;
  66.  
  67.     driverSettings.sysMemory = inMADDriver->sysMemory;
  68.     
  69.     myErr = noErr;
  70.     
  71.     myErr = (inMADDriver->ThePlug[ PlugNo].IOPlug) (order, AlienFile, theNewMAD, info, &driverSettings);
  72.     
  73.     return( myErr);
  74. }
  75.  
  76. OSErr    PPTestFile( char    *kindFile, Ptr AlienFile)
  77. {
  78.     short            i;
  79.     MADMusic    aMAD;
  80.     PPInfoRec        InfoRec;
  81.     
  82.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  83.     {
  84.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  85.         {
  86.             return( CallImportPlug( i, 'TEST', AlienFile, &aMAD, &InfoRec));
  87.         }
  88.     }
  89.     return MADCannotFindPlug;
  90. }
  91.  
  92. OSErr    PPInfoFile( char    *kindFile, FSSpec    *AlienFile, PPInfoRec    *InfoRec)
  93. {
  94.     short            i;
  95.     MADMusic    aMAD;
  96.     
  97.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  98.     {
  99.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  100.         {
  101.             return( CallImportPlug( i, 'INFO', AlienFile, &aMAD, InfoRec));
  102.         }
  103.     }
  104.     return MADCannotFindPlug;
  105. }
  106.  
  107. OSErr    PPExportFile( char    *kindFile, FSSpec    *AlienFile, MADMusic    *theNewMAD)
  108. {
  109.     short        i;
  110.     PPInfoRec    InfoRec;
  111.     
  112.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  113.     {
  114.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  115.         {
  116.             return( CallImportPlug( i, 'EXPL', AlienFile, theNewMAD, &InfoRec));
  117.         }
  118.     }
  119.     return MADCannotFindPlug;
  120. }
  121.  
  122. OSErr    PPImportFile( char    *kindFile, FSSpec    *AlienFile, MADMusic    **theNewMAD)
  123. {
  124.     short        i;
  125.     PPInfoRec    InfoRec;
  126.     
  127.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  128.     {
  129.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type))
  130.         {
  131.             *theNewMAD = (MADMusic*) MADNewPtrClear( sizeof( MADMusic), inMADDriver);
  132.             if( !*theNewMAD) return -1L;
  133.             
  134.             return( CallImportPlug( i, 'IMPL', AlienFile, *theNewMAD, &InfoRec));
  135.         }
  136.     }
  137.     return MADCannotFindPlug;
  138. }
  139.  
  140. OSErr    PPIdentifyFile( char    *type, Ptr AlienFile)
  141. {
  142.     FILE*                refNum;
  143.     short                i;
  144.     PPInfoRec        InfoRec;
  145.     OSErr                iErr;
  146.     
  147.     strcpy( type, "!!!!");
  148.     
  149.     // Check if we have access to this file
  150.     refNum = iFileOpen( AlienFile);
  151.     if( !refNum) return -1;
  152.     iClose( refNum);
  153.     
  154.     // Is it a MAD file?
  155.     iErr = CheckMADFile( AlienFile);
  156.     if( iErr == noErr)
  157.     {
  158.         strcpy( type, "MADH");
  159.         return noErr;
  160.     }
  161.     
  162.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  163.     {
  164.         if( CallImportPlug( i, 'TEST', AlienFile, 0L, &InfoRec) == noErr)
  165.         {
  166.             strcpy( type, inMADDriver->ThePlug[ i].type);
  167.             
  168.             return noErr;
  169.         }
  170.     }
  171.     
  172.     strcpy( type, "!!!!");
  173.     
  174.     return MADCannotFindPlug;
  175. }
  176.  
  177. Boolean    MADPlugAvailable( char    *kindFile)
  178. {
  179.     short        i;
  180.  
  181.     if( !strcmp( kindFile, "MADH")) return true;
  182.     
  183.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  184.     {
  185.         if( !strcmp( kindFile, inMADDriver->ThePlug[ i].type)) return true;
  186.     }
  187.     return false;
  188. }
  189.  
  190. typedef OSErr (*PLUGFILLDLLFUNC) ( PlugInfo*);
  191.  
  192. Boolean LoadPlugLib( Ptr name, PlugInfo* plug)
  193. {
  194.     PLUGFILLDLLFUNC        fpFuncAddress;
  195.     OSErr                            err;
  196.     
  197.     strcpy( plug->file, name);
  198.     
  199.     plug->hLibrary = LoadLibrary( name);
  200.     if( !plug->hLibrary) return false;
  201.     
  202.     plug->IOPlug = (PLUGDLLFUNC) GetProcAddress( plug->hLibrary, "main");
  203.     if( !plug->IOPlug) return false;
  204.     
  205.     fpFuncAddress = (PLUGFILLDLLFUNC) GetProcAddress( plug->hLibrary, "FillPlug");
  206.     if( !fpFuncAddress) return false;
  207.     
  208.     err = (*fpFuncAddress)( plug);
  209.     
  210.     return true;
  211. }
  212.  
  213. void MInitImportPlug( char *PlugsFolderName)
  214. {
  215.     inMADDriver = MADGetMADLibraryPtr();
  216.     
  217.     ///////////
  218.     inMADDriver->TotalPlug = 0;
  219.     ///////////
  220.     
  221.     {
  222.     HANDLE                hFind;
  223.     WIN32_FIND_DATA        fd;
  224.     BOOL                bRet = TRUE;
  225.     char                FindFolder[ 200], inPlugsFolderName[ 200];
  226.     
  227.     if( PlugsFolderName)
  228.     {
  229.         strcpy( inPlugsFolderName, PlugsFolderName);
  230.         strcat( inPlugsFolderName, "/");
  231.         
  232.         strcpy( FindFolder, inPlugsFolderName);
  233.     }
  234.     else
  235.     {
  236.         strcpy( inPlugsFolderName, "/");
  237.         strcpy( FindFolder, inPlugsFolderName);
  238.     }
  239.     strcat( FindFolder, "*.PLG");
  240.     
  241.     hFind = FindFirstFile( FindFolder, &fd);
  242.     
  243.     inMADDriver->ThePlug = (PlugInfo*) MADNewPtr( MAXPLUG * sizeof( PlugInfo), inMADDriver);
  244.     
  245.     while( hFind != INVALID_HANDLE_VALUE && bRet)
  246.     {
  247.         if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
  248.         {
  249.             if( inMADDriver->TotalPlug < MAXPLUG)
  250.             {
  251.                 char myCompleteFilename[ 200];
  252.                 
  253.                 strcpy( myCompleteFilename, inPlugsFolderName);
  254.                 strcat( myCompleteFilename, fd.cFileName);
  255.                 
  256.                 if( LoadPlugLib( myCompleteFilename, &inMADDriver->ThePlug[ inMADDriver->TotalPlug])) inMADDriver->TotalPlug++;
  257.             }
  258.         }
  259.         
  260.         bRet = FindNextFile( hFind, &fd);
  261.     }
  262.     
  263.     FindClose( hFind);
  264.     }
  265.     ///////////
  266. }
  267.  
  268. void CloseImportPlug()
  269. {
  270.     short i;
  271.     
  272.     for( i = 0; i < inMADDriver->TotalPlug; i++)
  273.     {
  274.             FreeLibrary( inMADDriver->ThePlug[ i].hLibrary);
  275.     }
  276. }